package com.vogue.supplymall.order.domain.service;

import java.util.Date;
import java.util.List;
import java.util.Map;

import com.vogue.supplymall.match.domain.dto.OrderPushDTO;
import com.vogue.supplymall.order.domain.model.OrderPull;

/**
 * 拉取订单事物层
 * @author 崔岳
 */
public interface OrderPullService extends BaseService<OrderPull, Long> {

    /**
     * 查询指定企业的作为卖家的订单
     * @param syscodeid 系统唯一id
     * @param maxdate maxdate
     * @return List
     */
    public List<Map<String, Object>> pullSell(Long syscodeid, Date maxdate);

    /**
     * 查询指定企业的作为卖家的订单总数
     * @param syscodeid 系统唯一id
     * @param maxdate maxdate
     * @return Map
     */
    public Map<String, Object> pullSellCount(Long syscodeid, Date maxdate);

    /**
     * 查询指定企业的作为买家的订单
     * @param syscodeid 系统唯一id
     * @param maxdate maxdate
     * @return List
     */
    public List<Map<String, Object>> pullBuy(Long syscodeid, Date maxdate);

    /**
     * 查询指定企业的作为买家的订单总数
     * @param syscodeid 系统唯一id
     * @param maxdate maxDate
     * @return Map
     */
    public Map<String, Object> pullBuyCount(Long syscodeid, Date maxdate);

    /**
     * 更新拉取后的卖家订单的拉取状态
     * @param syscodeid 系统唯一id
     * @param maxDate maxDate
     * @param pullCnt pullCnt
     */
    public void updatePullSellState(Long syscodeid, Date maxDate, Integer pullCnt);

    /**
     * 更新拉取后的买家订单的拉取状态
     * @param syscodeid 系统唯一id
     * @param maxDate maxDate
     * @param pullCnt pullCnt
     */
    public void updatePullBuyState(Long syscodeid, Date maxDate, Integer pullCnt);

    /**
     * 将已拉取的订单状态设置成供应链退回状态
     * @param syscodeid 系统唯一id
     * @param opDTOs opDTOs
     * @return Map
     */
    public Map<String, Object> reducePullSellState(Long syscodeid, List<OrderPushDTO> opDTOs);

    /**
     * 根据订单号查找订单号是否存在
     * @param onList onList
     * @return List
     */
    public List<Map<String, Object>> findOrderNumsByOrderNums(List<String> onList);

    /**
     * 根据订单id找到对应的支付方式及金额
     * @param orderIds 单据ids
     * @return List
     */
    public List<Map<String, Object>> getPayModeByOrderId(String orderIds);

    /**
     * 查询指定企业的作为卖家的退货订单总数
     * @param syscodeid 系统唯一id
     * @param maxdate maxdate
     * @return Map
     */
    public Map<String, Object> pullRefundSellCount(Long syscodeid, Date maxdate);

    /**
     * 查询指定企业的作为卖家的退货订单
     * @param syscodeid 系统唯一id
     * @param maxdate maxDate
     * @return List
     */
    public List<Map<String, Object>> pullRefundSell(Long syscodeid, Date maxdate);

    /**
     * 根据退货订单id找到对应的支付方式及金额
     * @param orderIds 单据ids
     * @return List
     */
    public List<Map<String, Object>> getPayModeByRefundOrderId(String orderIds);

    /**
     * 更新拉取后的卖家订单的拉取状态
     * @param syscodeid 系统唯一id
     * @param maxDate maxDate
     * @param pullCnt pullCnt
     */
    public void updatePullRefundSellState(Long syscodeid, Date maxDate, Integer pullCnt);

    /**
     * 将已拉取的退货单状态设置成供应链退回状态
     * @param syscodeid 系统唯一id
     * @param opDTOs opDTOs
     * @return Map
     */
    public Map<String, Object> reducePullSellRefundState(Long syscodeid, List<OrderPushDTO> opDTOs);
}
